package com.eadaula05.alunos;
import java.io.*;
import java.util.HashMap;
import java.util.Scanner;

import com.eadaula05.arquivos.LerArquivo1;

public class CadastroAlunoTexto1 {
	
	private Scanner entrada;
	private final String enderecoArq = "alunos.cdt";
	private File arquivo;
	private BufferedReader leitor;
	private BufferedWriter gravador;
	private HashMap<String, Aluno> alunos;
	
	public static void main (String[] args){
		CadastroAlunoTexto1 cat = new CadastroAlunoTexto1();
	}
	
	public CadastroAlunoTexto1(){
		arquivo = new File(enderecoArq);
		alunos = new HashMap<String, Aluno>();
		entrada = new Scanner(System.in);
		
		iniciar();
	}
	
	private void iniciar(){
		int opcao = -1;
		try{
			lerArquivo();
			do{
				exibeMenu();
				opcao = opcaoUsuario();
				switch(opcao){
				case 1:{
					exibirAlunos();
					break;
				}
				case 2:{
					novoAluno();
					break;
				}
				case 3:{
					removerAluno();
					break;
				}
				case 4:{
					break;
				}
				default :{
					System.out.println("Opção inexistente");
					opcao = -1;
					
	
				}
				}
				
			} while (opcao != 4);
			finalizar();
		} catch (IOException ex){
			System.out.println("Falha na manipulação do arquivo:");
		}
		System.out.println("Encerrando...");
		System.exit(0);
	}
	private void finalizar() throws IOException{
		System.out.println("Salvando dados no arquivo...");
		gravarArquivo();
	}
	private void exibeMenu(){
		System.out.println(":: Menu ::\n");
		System.out.println("1. Ver alunos\n 2. Adicionar alunos\n 3. Remover alunos\n 4. Sair");
		System.out.print(">> ");
	}
	private int opcaoUsuario() throws IOException{
		return entrada.nextInt();
	}
	private void exibirAlunos(){

		System.out.println("Lista de alunos\n");
		for (Aluno a : alunos.values()){
			System.out.println("Matricla: " + a.getMatricula());
			System.out.println("Nome: " + a.getNome());
			if (a.getEndereco() != null && !a.getEndereco().isEmpty()){
				System.out.println("Endereço: " + a.getEndereco());
			}
			if (a.getTelefone() != null && !a.getTelefone().isEmpty()){
				System.out.println("Telefone: " + a.getTelefone());
			}
			System.out.println();
		}
		System.out.println("----------------------------------");
	}
	private void novoAluno(){
		System.out.println("Informe matricula, nome, endereço e telefone do novo aluno separado por "
				+ "virgula");
		System.out.println("Apenas matriculas e nomes são obrigatorios. \n>>");
		
		entrada.nextLine();
		
		String dados = entrada.nextLine();
		String[] dadosAluno = dados.split(",");
		
		Aluno a = new Aluno(dadosAluno[0], dadosAluno[1]);
		if(dadosAluno.length >= 3){
			a.setEndereco(dadosAluno[2]);
		}
		if(dadosAluno.length >=4){
			a.setTelefone(dadosAluno[3]);
		}
		alunos.put(a.getMatricula(), a);
	}
	private void removerAluno(){
		System.out.println("Informe a matricula do aluno que deseja remover.\n>>");
		entrada.nextLine();
		String matricula  = entrada.nextLine();
		
		if (alunos.containsKey(matricula)){
			Aluno a = alunos.remove(matricula);
			System.out.println("Aluno " + a.getNome() + " removido.");
		} else {
			System.out.println("Matricula não encontrada.");
		}
	}
	private void lerArquivo() throws IOException{
		System.out.println("Carregando dados do arquivo..");
		leitor = new BufferedReader(new FileReader(arquivo));
		String dados = "";
		
		while ((dados = leitor.readLine())!= null){
			String[] dadosAluno = dados.split(",");
			
			Aluno aluno = new Aluno(dadosAluno[0], dadosAluno[1]);
			if (dadosAluno.length >= 3){
				aluno.setEndereco(dadosAluno[3]);
			}
			if (dadosAluno.length >= 4){
				aluno.setTelefone(dadosAluno[4]);
			}
			alunos.put(aluno.getMatricula(), aluno);
		}
		leitor.close();
		leitor = null;
	}
	private void gravarArquivo() throws IOException{
		if (alunos != null){
			gravador = new BufferedWriter(new FileWriter(arquivo, false));
			for (Aluno a : alunos.values()){
				String representacaoAluno = a.getMatricula() + "," + a.getNome();
				if (a.getEndereco() != null && !a.getEndereco().isEmpty()){
					representacaoAluno += "," + a.getEndereco();
				}
				if (a.getTelefone() != null && !a.getTelefone().isEmpty()){
					representacaoAluno += "," + a.getTelefone();
				}
				
				gravador.write(representacaoAluno + System.getProperty("line.separator"));
			}
			gravador.flush();
			gravador.close();
			gravador = null;
		}
	}
}
